package top.wfzzq.dp.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 工厂类，提供教师类的创建和管理的方法
 * 
 * @author wanghui
 *
 */
public class Boss {
	/**
	 * 教师集合
	 */
	public static Map<String, ITeacher> teachers = new HashMap<>();

	// 初始化状态：teachars[]
	// 第一次传入java
	// teacher中没有数据，就会创建一个javaTeacher实例
	// 并加入到集合，teachers['java':javateacher]
	// 第二次传入java
	// 集合中有java,直接返回javateacher

	// 第一次传入python
	// teacher中没有python数据，就会创建一个pythonTeacher实例
	// 并加入到集合，teachers['python':pythonteacher]
	// 第二次传入python
	// 集合中有python,直接返回pythonteacher
	/**
	 * 单列模式的工厂方法，同类型的不会反复创建
	 * 
	 * @param type
	 *            教师类型
	 * @return 对应类型教师
	 */
	public static ITeacher szhaopin(String type) {
		// 校验type不能为null，将平且type转换为小写模式
		type = type == null ? "java" : type.toLowerCase();
		// 判断类型是否合法
		if (!"java".equals(type) && !"python".equals(type)) {
			type = "java";
		}
		// 如果对应类型的教师存在就直接返回集合中对应的教师
		if (teachers.containsKey(type)) {
			return teachers.get(type);
		}
		// 否则就创建对应类型的教师放置到集合中再返回
		ITeacher teacher = null;
		if ("java".equals(type)) {
			teacher = new JavaTeacher();
		} else if ("python".equals(type)) {
			teacher = new PythonTeacher();
		}
		teachers.put(type, teacher);
		return teacher;
	}

	/**
	 * 工厂方法，用于产生教师
	 * 
	 * @param type
	 * @return
	 */
	public static ITeacher zhaopin(String type) {
		if ("java".equalsIgnoreCase(type)) {
			return new JavaTeacher();
		} else if ("python".equalsIgnoreCase(type)) {
			return new PythonTeacher();
		}
		 else if ("web".equalsIgnoreCase(type)) {
			return new  webTeacher();
		}

		// 默认返回java教师
		return new JavaTeacher();
	}
}
